home *** CD-ROM | disk | FTP | other *** search
- /* this file is a part of amp software, (C) tomislav uzelac 1996,1997
- */
- /* args.c created by Andrew Richards <A.Richards@phys.canterbury.ac.nz>
- */
-
- #include "amp.h"
- #include "audio.h"
-
- #ifdef __BEOS__
- #define __STDC__ 1
- #include <getopt.h>
- #else
- #include "getopt.h"
- #endif
-
- #include <stdio.h>
- #include <stdlib.h>
-
-
- void
- displayDisclaimer()
- {
- /* print a warm, friendly message
- */
- msg("\namp %d.%d.%d, (C) Tomislav Uzelac 1996,1997\n",MAJOR,MINOR,PATCH);
- msg("THIS PROGRAM COMES WITH ABSOLUTELY NO WARRANTY\n");
- msg("PLEASE READ THE DOCUMENTATION FOR DETAILS\n\n");
- }
-
- void
- displayUsage()
- {
- int idx;
-
- /* Losts of printfs for stupid compilers that can't handle literal newlines */
- /* in strings */
-
- printf("\
- usage: amp [options] [ MPEG audio streams... ]\n\
- amp -convert [ MPEG-audio stream ] [ output file ]\n\n\
- -h, -help display this usage information and exit\n\
- -v, -version display the version information and exit\n\
- -c, -convert convert the MPEG audio stream to output file format\n\
- -p, -play play the specified MPEG audio streams (default action)\n\
- -q, -quiet supress printing of messages to STDERR\n\
- -b, -buffer <size> set the audio buffer size to <size> k\n\
- -d, -dump dump binary data to STDERR\n\
- -s, -frame show a frame counter\n\
- -t, -time show time\n\
- -g, -gui output messages to stdout instead of stderr\n\
- (for use with xmpeg3 or similar GUIs)\n\
- -w wav output\n\
- -downmix downmix stereo streams to one channel\n\
- -nobuffer do not use an audio buffer\n\
- -volume <vol> set the volume to <vol> (0-100)\n\
- -debug <opts..> When compiled in debug <opt, opt2,...> code sections\n\
- Options: ");
-
- for(idx=0;debugLookup[idx].name!=0;idx++)
- printf("%s,",debugLookup[idx].name);
- printf("\010 \n");
-
- exit(0);
- }
-
- void
- displayVersion()
- {
- printf("amp - %d.%d.%d\n",MAJOR,MINOR,PATCH);
- exit(0);
- }
-
-
-
- int
- argVal(char *name, char *num, int min, int max)
- {
- int val;
-
- val=atoi(num);
- if ((val<min) || (val>max))
- die("%s parameter %d - out of range (%d-%d)\n",name,val,min,max);
- return(val);
- }
-
-
- int
- args(int argc,char **argv)
- {
- int c;
-
- static int showusage=0, showversion=0;
-
- AUDIO_BUFFER_SIZE=300*1024;
- A_DUMP_BINARY=FALSE;
- A_QUIET=FALSE;
- A_FORMAT_WAVE=FALSE;
- A_SHOW_CNT=FALSE;
- A_SET_VOLUME=-1;
- A_SHOW_TIME=0;
- A_AUDIO_PLAY=TRUE;
- A_WRITE_TO_FILE=FALSE;
- A_MSG_STDOUT=FALSE;
- A_DOWNMIX=FALSE;
-
- while (1) {
- static struct option long_options[] = {
- {"help", no_argument, 0, 'h'},
- {"debug", required_argument, 0, 1},
- {"version", no_argument, 0, 'v'},
- {"quiet", no_argument, 0, 'q'},
- {"play", no_argument, 0, 'p'},
- {"convert", no_argument, 0, 'c'},
- {"volume", required_argument, 0, 2},
- {"time", no_argument, 0, 't'},
- {"frame", no_argument, 0, 's'},
- {"gui", no_argument, 0, 'g'},
- {"buffer", required_argument, 0, 'b'},
- {"nobuffer", no_argument, &AUDIO_BUFFER_SIZE, 0},
- {"dump", required_argument, 0, 'd'},
- {"downmix",no_argument,0,'x'},
- {0, 0, 0, 0}
- };
-
- c = getopt_long_only(argc, argv, "xqgstwdpcb:vh", long_options,0);
-
- if (c == -1) break;
- switch (c) {
- case 1 : debugSetup(optarg); break;
- case 2 : A_SET_VOLUME=argVal("Volume",optarg,0,100); break;
- case 'q': A_QUIET=TRUE; break;
- case 's': A_SHOW_CNT=TRUE; break;
- case 't': A_SHOW_TIME=TRUE; break;
- case 'w': A_FORMAT_WAVE=TRUE; break;
- case 'd': A_DUMP_BINARY=TRUE; break;
- case 'g': A_MSG_STDOUT=TRUE; break;
- case 'p': A_AUDIO_PLAY=TRUE;A_WRITE_TO_FILE=FALSE;break;
- case 'c': A_AUDIO_PLAY=FALSE;A_WRITE_TO_FILE=TRUE;break;
- case 'b':
- #if !defined(LINUX_REALTIME)
- AUDIO_BUFFER_SIZE=1024*argVal("Buffer size",optarg,64,10000);
- #endif
- break;
- case 'v': showversion=1; break;
- case 'h': showusage=1; break;
- case 'x': A_DOWNMIX=TRUE;break;
- case '?': exit(1);
- case ':': printf("Missing parameter for option -%c\n",c); break;
- }
- }
- if (showversion) displayVersion();
- if (showusage) displayUsage();
- displayDisclaimer();
-
- return(optind);
- }
-
-